package com.github.hburgmeier.jerseyoauth2.authsrv.impl.configuration; import java.util.EnumSet; import java.util.Map; import java.util.Set; import javax.inject.Inject; import javax.servlet.ServletContext; import org.joda.time.DateTime; import org.joda.time.Duration; import org.joda.time.Period; import org.joda.time.format.PeriodFormatter; import org.joda.time.format.PeriodFormatterBuilder; import com.github.hburgmeier.jerseyoauth2.authsrv.api.IConfiguration; import com.github.hburgmeier.jerseyoauth2.authsrv.api.ScopeDescription; import com.github.hburgmeier.jerseyoauth2.authsrv.api.client.ClientType; import com.github.hburgmeier.jerseyoauth2.protocol.impl.ScopeParser; public class WebAppConfiguration implements IConfiguration { private static final Duration DFEAULT_TOKEN_LIFETIME = Duration.standardDays(1); private final ScopeParser scopeParser = new ScopeParser(); private final Duration tokenDuration; private final Set<String> defaultScopes; private final boolean strictSecurity; private final boolean supportAuthorizationHeader; private final boolean refreshTokenGeneration; private final boolean allowScopeEnhancementWithRefreshToken; private final boolean generateSecretForPublicClients; @Inject public WebAppConfiguration(final ServletContext servletContext) { this.tokenDuration = parseDuration(servletContext.getInitParameter("oauth2.tokenexpiration"), DFEAULT_TOKEN_LIFETIME); this.defaultScopes = scopeParser.parseScope(servletContext.getInitParameter("oauth2.defaultscopes")); this.strictSecurity = parseBoolean(servletContext.getInitParameter("oauth2.strictSecurity"), true); this.supportAuthorizationHeader = parseBoolean(servletContext.getInitParameter("oauth2.supportAuthzHeader"), true); this.refreshTokenGeneration = parseBoolean(servletContext.getInitParameter("oauth2.refreshTokenGeneration"), true); this.allowScopeEnhancementWithRefreshToken = parseBoolean(servletContext.getInitParameter("oauth2.allowScopeEnhancement"), true); this.generateSecretForPublicClients = parseBoolean(servletContext.getInitParameter("oauth2.generateSecretForPublicClients"), false); } @Override public Duration getTokenLifetime() { return tokenDuration; } @Override public Map<String, ScopeDescription> getScopeDescriptions() { return null; } @Override public Set<String> getDefaultScopes() { return defaultScopes; } @Override public boolean getStrictSecurity() { return strictSecurity; } @Override public boolean getEnableAuthorizationHeaderForClientAuth() { return supportAuthorizationHeader; } @Override public boolean getEnableRefreshTokenGeneration() { return refreshTokenGeneration; } @Override public boolean getAllowScopeEnhancementWithRefreshToken() { return allowScopeEnhancementWithRefreshToken; } @Override public boolean getGenerateSecretForPublicClients() { return generateSecretForPublicClients; } @Override public EnumSet<ClientType> getAllowedClientTypesForImplicitGrant() { return EnumSet.allOf(ClientType.class); } @Override public EnumSet<ClientType> getAllowedClientTypesForAuthorizationCode() { return EnumSet.of(ClientType.CONFIDENTIAL); } private boolean parseBoolean(String initParameter, boolean defaultValue) { return initParameter == null ? defaultValue : Boolean.parseBoolean(initParameter); } private Duration parseDuration(String initParameter, Duration defaultDuration) { if (initParameter!=null) { PeriodFormatter formatter = new PeriodFormatterBuilder() .appendDays().appendSuffix("d ") .appendHours().appendSuffix("h ") .appendMinutes().appendSuffix("min") .toFormatter(); Period p = formatter.parsePeriod(initParameter); return p.toDurationFrom(DateTime.now()); } else return defaultDuration; } }